С днем рождения, кожаный мешок

Всем привет!

Я создал генератор поздравлений на день рождения, основанный на Llama 2!

Вы можете использовать его прямо сейчас или скопировать предложенный промпт и использовать его в любой другой нейросетке (ChatGPTClaude 2Llama 2 70b).

Я протестировал приложение на своих друзьях, и они были в восторге от результатов! Приложение создает уникальные и забавные поздравления, которые, я уверен, вам понравятся!

Я был бы очень рад получить ваш фидбек и комментарии. Ваше мнение очень важно для меня и поможет мне сделать приложение еще лучше.

Вот ссылка на GitHub, где вы можете узнать больше о проекте.


P. S. Для обращения к нейросети нужно получить бесплатный токен, его хватит на 50-100 поздравлений. Авторизация проходит через GitHub, и занимает меньше минуты. Но, если по какой-то причине у вас не получилось авторизоваться, то напишите мне (см. контакты), и я вам помогу 🙂

P. P. S. Изначально я планировал, что это будет дополнение к моему приложению напоминалке дней рождений, но, кажется, оно превратилось в нечто большее 🙂

Изображения в статье сгенерированы при помощи Stable Diffusion в Clipdrop.co

Изображения в статье сгенерированы при помощи Stable Diffusion в Clipdrop.co


ссылка на оригинал статьи https://habr.com/ru/articles/752708/

Как ИТ-компании способствуют развитию децентрализованных сетей

В сериале «Кремниевая долина» главные герои строили «новый интернет». Децентрализованную платформу, данные в которой хранились на устройствах пользователей и IoT-девайсах вроде умных холодильников. По сюжету крупная корпорация пыталась захватить эту сеть, чтобы развивать её самостоятельно.

Подобные сценарии разворачиваются в реальном мире — ИТ-компании все чаще проявляют интерес к децентрализованным технологиям вроде ActivityPub или XMPP. Разработчиков беспокоит такое положение вещей, и они считают подобные инициативы попыткой переманить аудиторию. Однако есть и те, кто видит во всем этом положительные тенденции.

/ unsplash.com / Caroline Grondin

/ unsplash.com / Caroline Grondin

Позитивное влияние

Привлекают аудиторию. Многие децентрализованные социальные сети до сих пор остаются уделом энтузиастов. Этот факт сказывается на цифрах посещений и активной пользовательской базе. Даже таким проектам, как Diaspora, которые существуют больше десяти лет, не удалось обзавестись сколько-нибудь внушительной пользовательской базой [она не превышает миллиона человек].

Учитывая контекст, неудивительно, что некоторые участники сообщества рассматривают приход крупного бизнеса как положительное явление. Когда ИТ-компания, владеющая крупнейшей социальной сетью, погружается в децентрализованную экосистему, она привлекает к ней внимание широкой аудитории.

Что интересно, не только крупные ИТ-компании, но и их бывшие знаменитые сотрудники становятся частью тренда. Представляя собой яркие фигуры в мире информационных технологий, они могут легко заинтересовать новых пользователей. Так, Джек Дорси развивает децентрализованную социальную сеть Bluesky. Платформа проходит бета-тестирование, и на ней уже зарегистрировались порядка 450 тыс. пользователей [при этом почти два миллиона находятся в листе ожидания].

Вносят вклад в развитие децентрализованных технологий. За последние годы десятки открытых проектов изменили лицензии своих продуктов на запретительные. Их не устраивает, что крупные ИТ-компании продают разработки в качестве управляемых сервисов и не передают свои наработки в open source. Подобную точку зрения можно встретить и в сфере децентрализованных платформ/протоколов. Но всегда можно подобрать контраргумент — есть крупный бизнес, который участвует в развитии экосистемы. Так, в марте этого года разработчики WordPress приобрели плагин для интеграции блогов с сетью Fediverse и даже пригласили его автора в штат.

Улучшают пользовательский опыт. Многие пользователи децентрализованных социальных сетей среди их недостатков выделяют неудобный UI, не желают управлять собственными узлами и считают процесс онбординга излишне сложным. Да, он становится проще, однако среднестатистические пользователи не желают со всем этим заморачиваться и хотят платформы с понятными интерфейсами.

Именно здесь может пригодиться опыт владельцев крупных соцсетей. Их сотрудники обладают экспертизой, необходимой для запуска масштабных сервисов. Сервисов с удобными UI и UX, к которым тянется аудитория. И разработчики децентрализованных платформ могут перенять положительный опыт. После резкого притока пользователей в прошлом году создатели Mastodon добавили сервер по умолчанию и внесли поправки в интерфейс.

Немного визионерства

Некоторые члены ИТ-сообщества опасаются, что крупный бизнес перехватит инициативу в вопросах разработки децентрализованных сервисов, начнет запускать закрытые реализации протоколов и клиентов. Подобный трюк в прошлом уже проворачивали некоторые корпорации. Однако проблему можно решить, если разработчики децентрализованных протоколов будут делать выбор в пользу вирусных открытых лицензий. Альтернативный вариант — развивать «несвободные» решения. По мнению резидентов Hacker News, такой подход поспособствует конкуренции.

/ unsplash.com / Edouard Dognin

/ unsplash.com / Edouard Dognin

Также остается открытым вопрос регулирования. Среди политиков (например, в США) можно встретить мнение, что социальные сети должны нести ответственность за распространение фальшивых новостей и запрещенного контента на своих платформах. Можно ожидать, что успех децентрализованных сетей будет зависеть не только от степени вовлечения крупных ИТ-компаний, но и от точки зрения регуляторов.

Когда-то давно на рынке существовали централизованные порталы вроде AOL, пользователи которых могли получать доступ к контенту провайдера. Со временем они «растворились» в привычном нам децентрализованном интернете. Технология прошла полный круг — интернет стал платформой, на которой построены крупнейшие ИТ-компании, во многом ставшие монополистами в своей области. Однако есть основания полагать, что децентрализация одержит победу и в этом случае.


Дополнительное чтение в нашем корпоративном блоге:


ссылка на оригинал статьи https://habr.com/ru/articles/752678/

LeetCode 2532 (Hard++, Extra Category, Amazon). Time to Cross a Bridge. Swift solution

Description

There are k workers who want to move n boxes from an old warehouse to a new one. You are given the two integers n and k, and a 2D integer array time of size k x 4 where time[i] = [leftToRighti, pickOldi, rightToLefti, putNewi].

The warehouses are separated by a river and connected by a bridge. The old warehouse is on the right bank of the river, and the new warehouse is on the left bank of the river. Initially, all k workers are waiting on the left side of the bridge. To move the boxes, the i-th worker (0-indexed) can :

  • Cross the bridge from the left bank (new warehouse) to the right bank (old warehouse) in leftToRighti minutes.

  • Pick a box from the old warehouse and return to the bridge in pickOldi minutes. Different workers can pick up their boxes simultaneously.

  • Cross the bridge from the right bank (old warehouse) to the left bank (new warehouse) in rightToLefti minutes.

  • Put the box in the new warehouse and return to the bridge in putNewi minutes. Different workers can put their boxes simultaneously.

A worker i is less efficient than a worker j if either condition is met:

  • leftToRighti + rightToLefti > leftToRightj + rightToLeftj

  • leftToRighti + rightToLefti == leftToRightj + rightToLeftj and i > j

The following rules regulate the movement of the workers through the bridge:

  • If a worker x reaches the bridge while another worker y is crossing the bridge, x waits at their side of the bridge.

  • If the bridge is free, the worker waiting on the right side of the bridge gets to cross the bridge. If more than one worker is waiting on the right side, the one with the lowest efficiency crosses first.

  • If the bridge is free and no worker is waiting on the right side, and at least one box remains at the old warehouse, the worker on the left side of the river gets to cross the bridge. If more than one worker is waiting on the left side, the one with the lowest efficiency crosses first.

Return the instance of time at which the last worker reaches the left bank of the river after all n boxes have been put in the new warehouse.

Example 1:

Input: n = 1, k = 3, time = [[1,1,2,1],[1,1,3,1],[1,1,4,1]] Output: 6 Explanation:  From 0 to 1: worker 2 crosses the bridge from the left bank to the right bank. From 1 to 2: worker 2 picks up a box from the old warehouse. From 2 to 6: worker 2 crosses the bridge from the right bank to the left bank. From 6 to 7: worker 2 puts a box at the new warehouse. The whole process ends after 7 minutes. We return 6 because the problem asks for the instance of time at which the last worker reaches the left bank.

Example 2:

Input: n = 3, k = 2, time = [[1,9,1,8],[10,10,10,10]] Output: 50 Explanation:  From 0  to 10: worker 1 crosses the bridge from the left bank to the right bank. From 10 to 20: worker 1 picks up a box from the old warehouse. From 10 to 11: worker 0 crosses the bridge from the left bank to the right bank. From 11 to 20: worker 0 picks up a box from the old warehouse. From 20 to 30: worker 1 crosses the bridge from the right bank to the left bank. From 30 to 40: worker 1 puts a box at the new warehouse. From 30 to 31: worker 0 crosses the bridge from the right bank to the left bank. From 31 to 39: worker 0 puts a box at the new warehouse. From 39 to 40: worker 0 crosses the bridge from the left bank to the right bank. From 40 to 49: worker 0 picks up a box from the old warehouse. From 49 to 50: worker 0 crosses the bridge from the right bank to the left bank. From 50 to 58: worker 0 puts a box at the new warehouse. The whole process ends after 58 minutes. We return 50 because the problem asks for the instance of time at which the last worker reaches the left bank.

Constraints:
1 <= n, k <= 10^4
time.length == k
time[i].length == 4
1 <= leftToRighti, pickOldi, rightToLefti, putNewi <= 1000

Approach

The main for-loop in the code handles the following steps:

  1. Update the waiting list on the bridge.

  2. Pick a worker to pass the bridge based on the defined conditions.

  3. Advance the time.

  4. Update the count of remaining boxes that need to be moved.

Noteworthy points:

  1. When there are enough workers on the right bank, workers on the left side should not pass the bridge.

  2. When there are no workers waiting to cross the bridge on either side, the time is moved to the next moment when a worker could potentially be waiting to cross.

Code (Swift)

Overflow checks have been taken into consideration. The maximum time to move a box is at most 4 * 1000 (four steps to move the box, each taking 1000 time). With at most 1e4 boxes, the total time is at most 4e7, ensuring the solution is safe.

class Solution {      func findCrossingTime(_ n: Int, _ k: Int, _ time: [[Int]]) -> Int {         var lBank = PriorityQueue<Int>(comparator: { (a, b) -> Bool in             let ta = time[a]             let tb = time[b]             let ca = ta[0] + ta[2]             let cb = tb[0] + tb[2]             if ca == cb { return b < a }  // larger index cross first             return cb < ca  // larger cross time cross first         })         var rBank = PriorityQueue<Int>(comparator: { (a, b) -> Bool in             let ta = time[a]             let tb = time[b]             let ca = ta[0] + ta[2]             let cb = tb[0] + tb[2]             if ca == cb { return b < a }  // larger index cross first             return cb < ca  // larger cross time cross first         })          // 0 -> time of the worker will be waiting to cross the bridge, 1 ->idx         var lWorker = PriorityQueue<(Int, Int)>(comparator: { (a, b) -> Bool in a.0 < b.0 })         var rWorker = PriorityQueue<(Int, Int)>(comparator: { (a, b) -> Bool in a.0 < b.0 })          // initially, all at left bank         for i in 0..<k {             lBank.add(i)         }          var curTime = 0         var remainingBoxes = n         while remainingBoxes > 0 {             // process worker             while !lWorker.isEmpty && lWorker.peek()!.0 <= curTime {                 lBank.add(lWorker.poll()!.1)             }             while !rWorker.isEmpty && rWorker.peek()!.0 <= curTime {                 rBank.add(rWorker.poll()!.1)             }              var worker = -1             if !rBank.isEmpty {                 // right side can pass, a box will be put                 worker = rBank.poll()!                 let t = time[worker]                 lWorker.add((curTime + t[2] + t[3], worker))                 curTime += t[2]  // right to left                  remainingBoxes -= 1             } else if !lBank.isEmpty && (remainingBoxes > rBank.size + rWorker.size) {                 // left side can pass                 // left side only pass when there are more boxes                 worker = lBank.poll()!                 let t = time[worker]                 rWorker.add((curTime + t[0] + t[1], worker))                 curTime += t[0]  // left to right             } else if remainingBoxes == rBank.size + rWorker.size {                 curTime = rWorker.peek()!.0             } else {                 // if still empty, advance time                 let nxt: Int                 if rWorker.isEmpty {                     nxt = lWorker.peek()!.0                 } else if lWorker.isEmpty {                     nxt = rWorker.peek()!.0                 } else {                     nxt = min(lWorker.peek()!.0, rWorker.peek()!.0)                 }                  curTime = nxt             }         }          return curTime     } }  // Wrapper class for PriorityQueue struct PriorityQueue<Element> {     private var heap: [Element]     private let comparator: (Element, Element) -> Bool      init(comparator: @escaping (Element, Element) -> Bool) {         self.heap = []         self.comparator = comparator     }      var isEmpty: Bool {         return heap.isEmpty     }      var size: Int {         return heap.count     }      func peek() -> Element? {         return heap.first     }      mutating func add(_ element: Element) {         heap.append(element)         swim(heap.count - 1)     }      mutating func poll() -> Element? {         if heap.isEmpty { return nil }         if heap.count == 1 { return heap.removeFirst() }          heap.swapAt(0, heap.count - 1)         let element = heap.removeLast()         sink(0)          return element     }      private mutating func swim(_ index: Int) {         var childIndex = index         var parentIndex = (childIndex - 1) / 2          while childIndex > 0 && comparator(heap[childIndex], heap[parentIndex]) {             heap.swapAt(childIndex, parentIndex)             childIndex = parentIndex             parentIndex = (childIndex - 1) / 2         }     }      private mutating func sink(_ index: Int) {         var parentIndex = index          while true {             let leftChildIndex = 2 * parentIndex + 1             let rightChildIndex = 2 * parentIndex + 2             var candidateIndex = parentIndex              if leftChildIndex < heap.count && comparator(heap[leftChildIndex], heap[candidateIndex])             {                 candidateIndex = leftChildIndex             }             if rightChildIndex < heap.count                 && comparator(heap[rightChildIndex], heap[candidateIndex])             {                 candidateIndex = rightChildIndex             }              if candidateIndex == parentIndex {                 return             }              heap.swapAt(parentIndex, candidateIndex)             parentIndex = candidateIndex         }     } }

Sources: Github


ссылка на оригинал статьи https://habr.com/ru/articles/752698/

За секунды: полировка металлов электричеством


Меня всегда привлекали технологии, относительно доступные для обычного человека, и в то же время несколько необычные и незнакомые широкому кругу людей.

Когда говорят об обработке с применением жидкостей и электричества, большинство сразу думает о гальванике, более продвинутые вспоминают об электроэрозионной обработке, в то время как существует ещё одна интересная технология — электролитно-плазменная обработка.

Дальше мы обзорно поговорим о ней, а желающие смогут задуматься о применении её в своих проектах.

▍ Что это такое?

Суть электролитно-плазменной обработки заключается в том, что производится обработка металлических и полупроводниковых изделий (нержавеющие и углеродистые стали, медные и алюминиевые сплавы, латунь, цинк и даже кремний) в водных растворах солей. Для обработки медных и стальных сплавов применяются 3-5% водные растворы сульфата аммония и хлористого аммония, для обработки других металлов применяются растворы с содержанием солей в них не более 10%.

Под воздействием электрического тока вокруг всей поверхности обрабатываемой детали образуется пароплазменная оболочка, а сама обработка происходит весьма интенсивно ввиду воздействия на деталь химически активных веществ окружающей среды и электрических разрядов: среднее время полировки составляет от 2 до 5 минут, а снятие заусенцев длится не более 20 секунд.

Технология является весьма высокопроизводительной и позволяет получать на выходе изделия с высокой чистотой поверхности, без вклинившихся в них частичек абразива, хорошо обезжиренные.

Процесс протекает с большой скоростью и позволяет в большинстве случаев эффективно заменить обработку детали кислотами. Кроме того, его скорость приблизительно в 3-4 раза превышает механические способы обработки, и в 5-6 раз обработку кислотами.

▍ Подробности технологии

При обработке детали она подключается к положительному полюсу источника тока (т. е. является анодом), а ванна с электролитом, в которую погружена обрабатываемая деталь, к отрицательному полюсу (т. е. является катодом). Вся установка может работать в нескольких режимах в зависимости от плотности тока и напряжения, при этом в общем случае систему протекающих процессов можно описать законами электрохимии только при условии применения относительно низких плотностей тока и напряжения, при превышении же порогового значения эти законы перестают действовать и вокруг анода возникает плазменное облако.

Технология электролитно-плазменной полировки подразумевает использование высоких напряжений, что может быть опасно для жизни! Вся информация статьи даётся только в познавательных целях, автор ни к чему не призывает и не гарантирует. При интересе к этой теме рекомендуется тщательно ознакомиться с соответствующей литературой.

Режимы работы:

  • Электролиз: протекает в условиях плотности тока до 0,5 А/см$^{2}$ и величины напряжения примерно до 60 V.
  • Если напряжение повышается и находится в пределах от 60 до 70 V, то вокруг анода начинает образовываться пульсирующее (до 100 Гц) плазменное облако, пока ещё неустойчиво существующее (процесс представляет собой разложение воды на гремучую смесь, которая периодически пробивается разрядом и взрывается, а полость, которую заполняла газовая смесь, схлопывается, электролит снова касается электрода и всё повторяется).
  • При повышении напряжения до 200 V наблюдается возникновение стабильной пароплазменной оболочки, при этом плотность тока составляет 0,5-1 A/см$^{2}$. Этот режим и является основным режимом для полировки, где толщина пароплазменной оболочки составляет до 50 мкм (толщина является переменной и изменяющейся во времени).
  • Дальнейшее повышение напряжения приводит к переходу в так называемый «электрогидродинамический» режим, который отличается полным отрывом пароплазменной оболочки от электрода, увеличением её толщины, соответственно, увеличением сопротивления в приэлектронной зоне, пропаданием эффекта полировки. В общем случае можно сказать, что выход на этот режим происходит в зависимости от типа и состава электролита при разных напряжениях, где общей тенденцией является выход на него при более низких напряжениях при, соответственно, более высоких значениях концентрации электролита. Ещё один любопытный момент заключается в том, что выход на этот режим происходит при более низких напряжениях, если напряжение увеличивается со скоростью более 50 V/сек.

Для достижения эффективного процесса стараются добиваться максимальной тепловой нагруженности детали (но не превышая критические значения тепла, при которых происходит уже снижение стабильности пароплазменной оболочки), где критические значения находятся в пределах следующей прикладываемой мощности: $10^{6}\, Вт/см^{2}$.

Для возможности применения более широкого диапазона напряжений можно варьировать концентрацией электролита, увеличивая площадь обрабатываемой поверхности или медленно повышая напряжение до нужного уровня.

Кстати говоря, низкое качество обработки поверхности говорит о том, что к ней прикладывается недостаточная мощность. Кроме того, на качество обработки влияют также температура, концентрация и состав электролита, длительность обработки и величина питающего напряжения — рассмотрим их подробнее.

Как можно было бы догадаться, одним из существенных факторов, влияющих на процесс, является оптимальный подбор электролита. При этом электролит одного типа может совершенно не влиять на материал другого типа, например, нержавеющая сталь хорошо полируется в сульфате аммония (1-10%), в то время как углеродистые стали совершенно не подвержены такой полировке тем же самым электролитом!

Также сульфатом аммония хорошо полируются медные сплавы, при этом их поверхность становится коричневой и блестящей (оксидируется). Если нужен ещё более хороший результат, то он достигается с помощью применения раствора хлористого аммония и лимонной кислоты, при этом результат представляет собой именно полированную поверхность, без образования окисной плёнки.

Ещё возможно применение вещества под названием Трилон Б, которое применяется в энергетике для смягчения воды. В электролите, состоящем из этого вещества и водного раствора сульфата аммония (0,1-0,8%), отлично полируются медные сплавы, бронза, латунь. При питающем напряжении в 260 V процесс идёт весьма интенсивно — весь цикл полировки до неплохих результатов занимает не более 60 секунд!

В науке хорошо изучены электролиты, состоящие из одного — максимум двух компонентов (для применения в целях электроплазменной полировки), в то время как более сложные смеси изучены недостаточно.

Говоря об оптимальных значениях питающего напряжения, можно сказать, что обработка нержавеющей стали производится при напряжении в 230 V, алюминиевые сплавы хорошо обрабатываются в диапазоне 270-290 V, медные сплавы — вплоть до 260 V.

Говоря же о температуре, можно упомянуть, что хороших результатов можно добиться только при хорошо прогретом электролите, температура которого должна находиться в диапазоне приблизительно 70-90°С. При этом нужно учитывать (помимо отслеживания собственно эффективности протекания процесса), какую максимальную температуру активные компоненты электролита могут выдерживать без разложения (скажем, соли аммония разлагаются при повышении температуры более 85°С).

Кроме перечисленных факторов, естественно было бы предположить, что время обработки также будет оказывать существенное влияние. И это действительно так: в первые 90-120 секунд происходит уменьшение шероховатости поверхности примерно в два раза, в то время как дальнейшее продолжение обработки уже не даёт такого существенного сглаживания микрорельефа и только увеличивает зеркальность поверхности (хорошее качество полировки медных сплавов достигается как раз в диапазоне от 60 до 90 секунд).

Также на качество полировки существенно влияет и форма самого изделия, которая в идеале должна быть плоской, но не обязательно. Тем не менее, оптимальные результаты достигаются, если изделие не содержит существенных полостей, которые необходимо закрывать временными затычками, чтобы процесс протекал стабильно и не происходило разрушение пароплазменной оболочки.

▍ Для чего можно применять?

С помощью этой технологии можно производить как полировку поверхности, так и снятие технологических заусенцев, глубокое обезжиривание и удаление старых лакокрасочных покрытий, а также заточку инструментов.

Причём это хорошо работает как для маленьких объектов:

Так и относительно больших:

Получающееся качество хорошо иллюстрирует следующая картинка:

image

Картинка: PLOTNIKOV90

Картинка взята отсюда, там ещё много их, из разряда «было-стало».

Но это всё несколько скучно, поэтому мы подумаем о более интересных применениях! 🙂

Некоторое время назад мы рассматривали сочетания методов, с помощью которых домашние любители могут изготавливать собственные изделия из металлов, где ключевым элементом является получение расплавленного металла на дому — это могут быть как разнообразные красивости (например, статуэтки), так и вполне себе утилитарные детали технических устройств. Вкратце: это не так сложно, как может показаться на первый взгляд — для этого достаточно бытовой микроволновки. Об этом вот здесь написано подробнее.

Однако кроме расплавления металла необходимо получить форму, в которую этот металл заливается. Вот здесь один из самодельщиков подробно и пошагово разобрал технологию изготовления подобной формы с использованием бытового FDM 3D-принтера. Вкратце: будущая литейная деталь распечатывается на 3D-принтере с использованием PLA-пластика, после чего засыпается песком, трамбуется и устанавливается в духовку обычной кухонной плиты, плита нагревается, и пластик вытекает из формы, после чего форма готова к заливке металла.

После заливки и остывания мы получаем деталь, которая далеко не отличается гладкостью поверхности, и с этим нужно что-то делать (танцы с ацетоном, как при ABS, или лимоненом, как при PLA, уже не помогут). И здесь нам может прийти на помощь эта технология (электролитно-плазменная полировка), которая позволяет буквально за считаные секунды получить гладкую полированную поверхность металлов, причём коэффициент отражения этой поверхности (если верить литературным источникам) может достигать 73%! (другими словами, очень сильно выглаживается поверхность, которая начинает приближаться по гладкости к зеркальной).

Причём интересно не только это, а также и то, что подобное качество поверхности достигается буквально за секунды, что заставляет пристально присмотреться к возможности конвейерной штамповки (даже на дому) металлических статуэток и деталей механизмов! Стартап? Почему бы и нет…

▍ Список использованной литературы

  1. И. С. Куликов, С. В. Ващенко, А. Я. Каменев — «Электролитно-плазменная обработка материалов».
  2. В. В. Баковец, О. В. Поляков, И. П. Долговесова — «Плазменно-электролитическая анодная обработка металлов».
  3. Л. Я. Попилов — «Электрофизическая и электрохимическая обработка металлов».
  4. Б. А. Артамонов и др. — «Электрофизические и электрохимические методы обработки материалов».

Telegram-канал с розыгрышами призов, новостями IT и постами о ретроиграх 🕹️


ссылка на оригинал статьи https://habr.com/ru/articles/752704/

Мы провели PyCon Russia 2023

В конце июля питонисты со всей страны съехались в Москву, чтобы побывать на самой масштабной, но душевной конференции для python-разработчиков: PyCon Russia. Держите отчет о том, как это было. 

В дождливую московскую пятницу утром в Старт Хаб яблоку некуда было упасть — в этом году в конференции участвовали больше шестисот человек. Такого еще не помнит новейшая пиконовская история.

У нас было два трека: Python и Data. А еще мы сделали мастер-класс по профилированию кода на питоне, круглый стол на тему «Рекомендации в продакшене» и провели Lighting Talks, на которых каждый желающий мог выступить с коротким докладом на любую тему. Словом, программа получилась насыщенная и разнообразная — каждый нашел для себя что-то интересное и поучительное. 

Очень круто подготовились наши партнеры — найти пустующее место хотя бы у одного из стендов было невозможно. 

На стенде Selectel играли в python-баскетбол. На стенде Whoosh можно было сыграть в «Сегу», не слезая с самоката. Компания АСТРА поила всех коктейлями с невозможно красивой подачей, а Домклик раздавал кубики Рубика и беспроводные зарядки за участие в опросе и выполнение задания. На стенде Контура два дня подряд шли соревнования по игре в Змейку, а еще здесь раздавали переводные татуировки, так что к концу конференции участники и организаторы заметно преобразились. 

После официальной программы началась на легендарная афтепати: кто-то соревновался в умении стоять на баланс борде, кто-то проверил широту кругозора, а кто-то просто развлекался и знакомился с людьми. Зафиналили первый день как обычно песнями под гитару у костра. Фотодоказательств нет, но поверьте на слово: это было очень уютно и душевно.

Кстати, наши классные юбилейные футболки (в этом году мы провели PyCon Russia в десятый раз) разобрали в первый же день. Получается, теперь у ребят есть настоящий эксклюзив =)

Во второй день мы наградили лучших спикеров конференции — ими стали Карина Кванчиани с докладом «Автоматизация процесса создания набора данных на примере РЖЯ» в Data Track и Андрей Власовских с докладом «Функциональщина в Python — это плохая идея?» в Python Track. 

В общем, было как всегда здорово и как обычно — чуть-чуть лучше, чем в прошлом году. Так что заранее приглашаем всех на PyCon Russia 2024: самые предусмотрительные уже отправляют заявки на доклады. 

Все фотографии с конференции можно посмотреть в нашей группе Вконтакте. Спасибо всем, кто приехал и сделал Пайкон таким классным и душевным. 


ссылка на оригинал статьи https://habr.com/ru/articles/752676/